package com.hb.trade.client.project;

import com.hb.core.pojo.parent.PageResult;
import com.hb.core.pojo.project.notice.dto.*;
import com.hb.core.pojo.project.notice.entity.Notice;
import com.hb.core.pojo.project.notice.vo.NoticeListVo;
import com.hb.core.pojo.project.portal.dto.PortalNoticeDTO;
import com.hb.core.pojo.project.section.dto.BidSectionDTO;
import org.fzzn.core.model.msg.Message;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * 公告通知Feign
 *
 * @author Lix1ang
 * @date 2021-12-3 15:50:11
 */
@FeignClient("hb-project")
public interface NoticeClient {

    /**
     * 新增最高限价公告
     *
     * @param priceDto
     * @return
     */
    @PostMapping("/notice/saveLimitPriceNotice")
    Message<Boolean> saveLimitPriceNotice(@RequestBody NoticeLimitPriceDTO priceDto);

    /**
     * 最高限价查看
     *
     * @param bidSectionDto
     * @return
     */
    @PostMapping("/notice/info/limitPriceNotice")
    Message<NoticeLimitPriceDTO> infoLimitPriceNotice(@RequestBody NoticeBidSectionDTO bidSectionDto);

    /**
     * 新增其他公告
     *
     * @param noticeDto
     * @return
     */
    @PostMapping("/notice/saveOtherNotice")
    Message saveOtherNotice(@RequestBody NoticeDTO noticeDto);

    /**
     * 其他公告列表
     *
     * @param noticeDto
     * @return
     */
    @PostMapping("/notice/info/otherNotice")
    Message<PageResult<NoticeDTO>> infoOtherNotice(@RequestBody NoticeDTO noticeDto);

    /**
     * 其他公告详情
     *
     * @param noticeId
     * @return
     */
    @GetMapping("/notice/info/otherNoticeById")
    Message<NoticeDTO> otherNoticeById(@RequestParam("noticeId") Long noticeId);


    /**
     * 根据公告id查询补充邀请信息
     *
     * @param sectionId
     * @return
     */
    @GetMapping("/notice/findSupplementInvitationByNoticeId")
    Message findSupplementInvitationByNoticeId(@RequestParam(value = "sectionId") Long sectionId);

    /**
     * 发布公告
     *
     * @param notice
     * @return
     */
    @PostMapping("/notice/noticeRelease")
    Message<Boolean> noticeRelease(@RequestBody NoticeDTO notice);

    // *********************************************************************************
    // *                             notice manage start                               *
    // *********************************************************************************

    /**
     * 新建公告时返回相应的公告信息
     *
     * @param notice
     * @return
     * @update zhaojk
     */
    @PostMapping("/notice/initNoticeData")
    Message<NoticeDTO> initNoticeData(NoticeDTO notice);

    /**
     * 保存公告信息
     * 保存时会再进行业务上的验证, 该方法需要判断是否成功返回数据
     *
     * @param noticeDTO
     * @return
     * @update zhaojk
     */
    @PostMapping("/notice/saveNotice")
    Message<NoticeDTO> saveNotice(@RequestBody NoticeDTO noticeDTO);

    /**
     * 查询公告列表信息
     * 指定项目下所有标段关联的公告列表
     * 按创建时间排序
     *
     * @param noticeDTO projectId 项目ID
     * @return {@link Message}
     * @update zhaojk
     */
    @PostMapping("/notice/findNoticeList")
    Message<PageResult<NoticeDTO>> findNoticeList(NoticeDTO noticeDTO);

    /**
     * @param notice: NoticeDTO
     * @Description: 查询公告页面的信息 (有公告id只查询这个公告的信息,有标段的查询首次公告)
     * @Author: zhongdl
     * @Date:2021/12/8 9:53
     * @return: {@link org.fzzn.core.model.msg.ResponseDto }
     * @update zhaojk
     **/
    @PostMapping("/notice/findNoticeInfo")
    Message<NoticeDTO> findNoticeInfo(@RequestBody NoticeDTO notice);

    /**
     * 发布公告, 修改公告的发布状态
     *
     * @param notice id 公告ID
     * @return {@link Message}
     * @update zhaojk
     */
    @PostMapping("/notice/deploy")
    Message<Boolean> noticeDeploy(@RequestBody NoticeDTO notice);

    /**
     * 查询指定标段关联的所有公告
     *
     * @param noticeDTO
     * @return
     * @update zhaojk
     */
    @PostMapping("/notice/pageBySectionId")
    Message<PageResult<NoticeDTO>> pageBySectionId(NoticeDTO noticeDTO);

    /**
     * 门户网站 查询公告
     *
     * @param noticePortalDTO
     * @return
     */
    @PostMapping("/notice/noticeList")
    Message<PageResult<NoticePortalDTO>> noticeList(@RequestBody NoticePortalDTO noticePortalDTO);

    /**
     * 门户网站 查询公告详情
     *
     * @param noticePortalDTO
     * @return
     */
    @PostMapping("/notice/noticeDetail")
    Message<NoticePortalDTO> noticeDetail(@RequestBody NoticePortalDTO noticePortalDTO);

    /**
     *
     * @Description: 查询需要推送的公告
     * @Author: zhongdl
     * @Date:2022/2/23 9:07
     * @param noticeDTO:
     * @return: {@link Message< List< NoticeDTO>> }
     **/
    @PostMapping("/notice/listPushNotice")
    Message<List<NoticeDTO>> listPushNotice(@RequestBody NoticeDTO noticeDTO);

    /**
     *
     * @Description: 查询公告的标段列表
     * @Author: zhongdl
     * @Date:2022/3/4 10:37
     * @param noticeDTO:
     * @return: {@link Message< List< BidSectionDTO>> }
     **/
    @PostMapping("/notice/listNoticeBidSection")
    Message<List<BidSectionDTO>> listNoticeBidSection(@RequestBody NoticeDTO noticeDTO);

    /**
     * 根据标段id查询公告列表
     * @param noticeListDTO
     * @return
     * @author ljs
     * @date 2022-3-31 09:44:25
     */
    @PostMapping("/notice/listNoticeBySectionId")
    Message<List<NoticeListVo>> listNoticeBySectionId(@RequestBody NoticeListDTO noticeListDTO);

    /**
     * 根据Id查询公告
     *
     * @author yuezheng
     * @param noticeDTO
     * @return Notice
     * @date 2022/4/19 4:04 PM
     */
    @PostMapping("/notice/findById")
    Message<Notice> findNoticeById(@RequestBody NoticeDTO noticeDTO);

    /**
     * 门户使用查询关联公告
     * @param noticePortalDTO
     * @return
     */
    @PostMapping("/portal/findNoticesBySectionId")
    Message<List<Notice>> findNoticesBySectionId(@RequestBody NoticePortalDTO noticePortalDTO);

    /**
     * 新增门户公告
     *
     * @param portalNoticeDTO
     * @return
     */
    @PostMapping("/portal/addPortalNotice")
    Message<Boolean> addPortalNotice(@RequestBody PortalNoticeDTO portalNoticeDTO);

    /**
     * 删除门户公告
     *
     * @param portalNoticeDTO
     * @return
     */
    @PostMapping("/portal/delPortalNotice")
    Message<Boolean> delPortalNotice(@RequestBody PortalNoticeDTO portalNoticeDTO);

    /**
     * 更新门户公告
     *
     * @param portalNoticeDTO
     * @return
     */
    @PostMapping("/portal/updPortalNotice")
    Message<Boolean> updPortalNotice(@RequestBody PortalNoticeDTO portalNoticeDTO);

    /**
     * 获取门户公告详情
     *
     * @param portalNoticeDTO
     * @return
     */
    @PostMapping("/portal/getPortalNotice")
    Message<PortalNoticeDTO> getPortalNotice(@RequestBody PortalNoticeDTO portalNoticeDTO);

    /**
     * 获取门户公告列表
     *
     * @param portalNoticeDTO
     * @return
     */
    @PostMapping("/portal/listPortalNotice")
    Message<List<PortalNoticeDTO>> listPortalNotice(@RequestBody PortalNoticeDTO portalNoticeDTO);

    /**
     * @Description: 根据项目ID查询公告
     *
     * @author yuezheng
     * @param noticeDTO
     * @return org.fzzn.core.model.msg.Message
     * @date 2022/6/30 17:32
     */
    @PostMapping("/notice/findNoticeByProjectId")
    Message findNoticeByProjectId(@RequestBody NoticeDTO noticeDTO);
}
